#pragma once
#ifndef BOOK_H
#define BOOK_H

#include <string>
#include <iostream>
using namespace std;

class Book {
private://封装图书的核心数据，外部不能直接访问
    string bookId;      // 书号
    string title;       // 书名
    string author;      // 作者
    string publisher;   // 出版社
    string category;    // 分类
    int totalCount;     // 总藏书量
    int availableCount; // 可借数量
    bool status;        // 状态

public://提供安全操作接口
    // 构造函数
    Book();
    Book(string id, string t, string a, string p, string c, int total);

    // Getter方法
    string getBookId() const { return bookId; }
    string getTitle() const { return title; }
    string getAuthor() const { return author; }
    string getPublisher() const { return publisher; }
    string getCategory() const { return category; }
    int getTotalCount() const { return totalCount; }
    int getAvailableCount() const { return availableCount; }
    bool getStatus() const { return status; }

    // Setter方法
    void setTitle(string t) { title = t; }
    void setAuthor(string a) { author = a; }
    void setPublisher(string p) { publisher = p; }
    void setCategory(string c) { category = c; }
    void setTotalCount(int count) { totalCount = count; }
    void setAvailableCount(int count) { availableCount = count; }
    void setStatus(bool s) { status = s; }

    // 功能方法
    void displayInfo() const;
    string toString() const;
    static Book fromString(const string& data);

    // 操作符重载
    bool operator==(const Book& other) const {
        return bookId == other.bookId;
    }
};

#endif